package com.ppc.service;

import com.ppc.dto.UserLoginVerifyCodeDTO;
import com.ppc.dto.WorkerChangeInfoDTO;
import com.ppc.dto.WorkerLoginDTO;
import com.ppc.entity.Tag;
import com.ppc.result.PageResult;
import com.ppc.result.Result;
import com.ppc.vo.WorkerCreditVO;
import com.ppc.vo.WorkerInfoQueryVO;
import com.ppc.vo.WorkerLoginVO;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;

/**
 * 工人接口
 *
 * @author Jeferry
 * @date 2023/12/20
 */
public interface WorkerService {

  /**
   * 工人登录
   *
   * @param workerLoginDTO 工人登录信息
   * @return {@link WorkerLoginVO}
   */
  WorkerLoginVO login(WorkerLoginDTO workerLoginDTO);

  /**
   * 查询工人的信誉
   *
   * @param workerid 工人的id
   * @return {@link List}<{@link WorkerCreditVO}>
   */
  List<WorkerCreditVO> checkCredit(Integer workerid);

  /**
   * 查询工人的个人信息
   *
   * @param workerid 工人的id
   * @return {@link WorkerInfoQueryVO}
   */
  WorkerInfoQueryVO queryInformation(Integer workerid);

  /**
   * 修改工人的个人信息
   *
   * @param workerChangeInfoDTO 工人的个人信息
   */
  void changeInformation(WorkerChangeInfoDTO workerChangeInfoDTO);

  /**
   * 修改工人的标签
   *
   * @param tagNameList 工人的标签列表
   */
  void changeTag(List<Integer> tagNameList);

  /**
   * 增加工人的标签
   *
   * @param tagId 标签id
   */
  void addTag(Integer tagId);

  /**
   * 删除工人的标签
   *
   * @param tagId 标签id
   */
  void deleteTag(Integer tagId);

  /**
   * 工人展示自己标签
   *
   * @param page 页码
   * @param pageSize 页大小
   * @return {@link Result}<{@link PageResult}>
   */
  PageResult showMyTags(Integer page, Integer pageSize);

  /**
   * 展示所有标签
   *
   * @param page     页码
   * @param pageSize 页大小
   * @return {@link PageResult}
   */
  PageResult selectAllTags(Integer page, Integer pageSize);

  /**
   * 展示所有有关信誉的日志
   *
   * @return {@link List}<{@link String}>
   */
  List<String> showRecordingCredit();

  /**
   * 展示所有有关金钱的日志
   *
   * @return {@link List}<{@link String}>
   */
  List<String> showRecordingMoney();

  /**
   * 注销账户
   */
  void logOffAccount();

  /**
   * 工人提现
   *
   * @param money 提现金额
   */
  void cashWithdrawal(Float money);

  Long uploadImg(MultipartFile file);

  WorkerLoginVO loginVerfiy(UserLoginVerifyCodeDTO userLoginVerifyCodeDTO);
}
